﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Torneo.DataAccess;
using Torneo.Entidades;
using System.Data;

namespace Torneo.Repository
{
    public class JugadorRepository : IJugadorRepository
    {
        private TorneoDbContext _context;

        public JugadorRepository(TorneoDbContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("Null Context");
            }

            this._context = context;
        }

        public Jugador ObtenerJugadorPorId(int id)
        {
            return _context.Jugadores.SingleOrDefault(x => x.JugadorId == id);
        }

        public IList<Entidades.Jugador> ObtenerTodos()
        {
            return _context.Jugadores.ToList();
        }

        public void AgregarJugador(Jugador jugador)
        {
            _context.Jugadores.Add(jugador);
            _context.SaveChanges();
        }

        public void EliminarJugador(Jugador jugador)
        {
            _context.Jugadores.Remove(jugador);
            _context.SaveChanges();
        }

        #region Miembros de IDisposable

        public void Dispose()
        {
            this._context.Dispose();
        }

        #endregion


        public void ModificarJugador(Jugador jugador)
        {
            _context.Jugadores.Attach(jugador);
            _context.Entry(jugador).State = EntityState.Modified;
            _context.SaveChanges();
        }


        public IList<Entidades.Jugador> ObtenerJugadoresSinEmparejamiento()
        {
            var query = from j in _context.Jugadores
                        where !( from emp in _context.Emparejamientos 
                                 select emp.JugadorA.JugadorId).Contains(j.JugadorId) &&
                              !( from emp in _context.Emparejamientos 
                                 select emp.JugadorB.JugadorId).Contains(j.JugadorId)
                        select j;

            return query.ToList<Entidades.Jugador>();
        }
    }
}
